package com.mingzhi.forum.exception;

import com.mingzhi.forum.common.AppResult;
import com.mingzhi.forum.common.ResultCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 统一异常处理
 */
@Slf4j
@ControllerAdvice  //用于全局处理控制器异常
//该注解的功能 ： 该类中的方法可以捕获并处理来自所有控制器抛出的异常
public class GlobalExceptionHandler {

    @ResponseBody
    @ExceptionHandler(ApplicationException.class)//当控制器方法抛出 ApplicationException 类型的异常时，带有 @ExceptionHandler(ApplicationException.class) 注解的方法会被调用。
    public AppResult handleApplicationException(ApplicationException e){
        //打印异常
        e.printStackTrace();//上线就要删除这个
        //打印日志
        log.error("e.getMessage() = " + e.getMessage());
        if (e.getErrorResult() != null){
            return e.getErrorResult();
        }
        //返回异常信息
        return AppResult.failed(e.getMessage());
    }

    @ResponseBody
    @ExceptionHandler(Exception.class)
    public AppResult handleException(Exception e){
        //打印异常
        e.printStackTrace();//上线就要删除这个
        //打印日志
        log.error("e.getMessage() = " + e.getMessage());
        if (e.getMessage() == null){
            return AppResult.failed(ResultCode.ERROR_SERVICES);
        }
        return AppResult.failed(e.getMessage());
    }
}
